<?php
/* 
 * Вывод изображения
 */

// ищем запрашиваемое изображение в кэше
$tpl=mysql_escape_string($_REQUEST['tpl']);
if(file_exists($_SERVER['DOCUMENT_ROOT']."/i/cache/".$_REQUEST['id']."_$tpl.".$_REQUEST['out']))
{
    $image_file=@file_get_contents($_SERVER['DOCUMENT_ROOT']."/i/cache/".$_REQUEST['id']."_$tpl.".$_REQUEST['out']);
    header("Content-type: image") ;
    print $image_file;
    exit(0);
}

require_once($_SERVER['DOCUMENT_ROOT']."/cms/config/dbAccess.inc.php");
require_once($_SERVER['DOCUMENT_ROOT']."/cms/classes/class.database.php");
$db=new DataBase();

if(!empty($_REQUEST['id']))
{
    // ищем заданную картинку в базе
    $img_id=intval($_REQUEST['id']);
    $image=mysql_fetch_assoc(mysql_query("SELECT * FROM ".ARX_DB_TABLE_PREFIX."cms_images WHERE id=$img_id"));
    if($image)
    {
        if($tpl)
        {
            // ищем заданный шаблон в базе
            $template=mysql_fetch_assoc(mysql_query("SELECT * FROM ".ARX_DB_TABLE_PREFIX."cms_images_templates WHERE name='$tpl'"));
            if($template or $tpl=="thumbnail")
            {
                $params=($tpl=="thumbnail")? array("width"=>100, "height"=>100) : unserialize($template['params']);
                // узнаем тип оригинального изображения
                $image_type=get_image_type($image['id']);
                switch($image_type)
                {
                    case "jpg":
                       $img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']."/i/".$image['id'].".jpg");
                    break;

                    case "png":
                       $img = imagecreatefrompng($_SERVER['DOCUMENT_ROOT']."/i/".$image['id'].".png");
                    break;

                    case "gif":
                       $img = imagecreatefromgif($_SERVER['DOCUMENT_ROOT']."/i/".$image['id'].".gif");
                    break;
                }
                // получаем размеры оригинала
                $width = imageSX($img);
                $height = imageSY($img);
                // устанавливаем выходные размеры
                $target_width = $params['width'];
                $target_height = $params['height'];
                $target_ratio = $target_width / $target_height;
                $img_ratio = $width / $height;

                // вычисляем новые размеры изображения исходя из заданных в шаблоне высоты и ширины
                if ($target_ratio > $img_ratio) {
                    $new_height = $target_height;
                    $new_width = $img_ratio * $target_height;
                } else {
                    $new_height = $target_width / $img_ratio;
                    $new_width = $target_width;
                }

                if ($new_height > $target_height) {
                    $new_height = $target_height;
                }
                if ($new_width > $target_width) {
                    $new_height = $target_width;
                }

                // создаем новое изображение
                // если нужно сохранить геометрию картинки, то новое изображение будет размером new_width и new_height
                if($params['save_geometry']==1)
                {
                    $target_width=$new_width;
                    $target_height=$new_height;
                }
                $new_img =ImageCreateTrueColor($target_width, $target_height);
                // Turn off alpha blending and set alpha flag
                imagealphablending($new_img, false);
                imagesavealpha($new_img, true);
                // узнаем цвет фона, если опция сохранения геометрии не указана
                $background=explode(",", $params['background']);
                // если что не так - цвет будет белый :)
                if(!$background) $background=array(255,255,255);
                imagefilledrectangle($new_img, 0, 0, $target_width-1, $target_height-1, imagecolorallocate($new_img, $background[0], $background[1], $background[2]));
                imagecopyresampled($new_img, $img, ($target_width-$new_width)/2, ($target_height-$new_height)/2, 0, 0, $new_width, $new_height, $width, $height);
                // сообщаем браузеру, что отдадим ему картинку, а не текст
                header("Content-type: image") ;
                // исходя из того, что именно просили нас выдать - выдаем
                switch($_REQUEST['out'])
                {
                    case "jpg":
                    case "jpeg":
                    // делаем кэш
                    $quality=($params['quality'])? $params['quality'] : 75;
                    imagejpeg($new_img, $_SERVER['DOCUMENT_ROOT']."/i/cache/".$image['id']."_$tpl.".$_REQUEST['out'], $quality);
                    imagejpeg($new_img);
                    break;

                    case "png":
                    // делаем кэш
                    $quality=($params['quality'])? round(10-$params['quality']/10) : 0;
                    imagepng($new_img, $_SERVER['DOCUMENT_ROOT']."/i/cache/".$image['id']."_$tpl.".$_REQUEST['out'], $quality, PNG_NO_FILTER);
                    imagepng($new_img, null, $quality, PNG_NO_FILTER);
                    break;

                    case "gif":
                    // делаем кэш
                    imagegif($new_img, $_SERVER['DOCUMENT_ROOT']."/i/cache/".$image['id']."_$tpl.".$_REQUEST['out']);
                    imagegif($new_img);
                    break;
                }
                //imagedestroy($new_img);
                //imagedestroy($img);
                exit(0);
            }
            else
            {
                // шаблон не нашли
                error("Required template ($tpl) not found.");
            }
        }
        else
        {
            // выводим оригинал без изменений
            $image_file=@file_get_contents($_SERVER['DOCUMENT_ROOT']."/i/".$image['id'].".".$_REQUEST['out']);
            if($image_file)
            {
                header("Content-type: image") ;
                print $image_file;
                exit(0);
            }
            else
            {
                error("This image does not have .".$_REQUEST['out']." extension!");
            }
        }
    }
    else
    {
        // картинку в базе не нашли...
        error("Image not found.");
    }
}
else
{
    error("Image not found");
}


function get_image_type($img_id)
{
    if(file_exists($_SERVER['DOCUMENT_ROOT']."/i/".$img_id.".jpg") or file_exists($_SERVER['DOCUMENT_ROOT']."/i/".$img_id.".jpeg"))
    return "jpg";
    if(file_exists($_SERVER['DOCUMENT_ROOT']."/i/".$img_id.".png"))
    return "png";
    if(file_exists($_SERVER['DOCUMENT_ROOT']."/i/".$img_id.".gif"))
    return "gif";
}

function error($str)
{
$im = @imagecreatetruecolor(strlen($str)*10, 25)
      or die('Cannot Initialize new GD image stream');
$text_color = imagecolorallocate($im, 233, 18, 91);
imagestring($im, 4, 5, 5,  $str, $text_color);
header("Content-type: image") ;
imagepng($im);
imagedestroy($im);
}
?>
